export function recursionFn<T=any>(source:{[key:string] : any}[], parentId:any, keyField = 'id', parentField = 'parentId', childrenName = 'children') :T[]{
    let target:T[] = []
    function fn(s:{[key:string] : any}[], t:any[], p:any) {
      s.forEach(item => {
        if(item[parentField] == p) {
          t.push(item)
          item[childrenName] = []
          fn(s, item[childrenName], item[keyField])
          if(item[childrenName].length == 0) {
              delete item[childrenName]
          }
        }
      })
    }
  
    fn(source, target, parentId)
  
    return target
  }


  export function parseTime(time:any, cFormat:string='{y}-{m}-{d} {h}:{i}:{s}') {
    if(time == 0 || time == null){
      return ''
    }
    
    if (arguments.length === 0) {
      return null
    }
    const format = cFormat
    let date
    if (typeof time === 'object') {
      date = time
    } else {
      if (('' + time).length === 10) time = parseInt(time) * 1000
      date = new Date(time)
    }
    const formatObj = {
      y: date.getFullYear(),
      m: date.getMonth() + 1,
      d: date.getDate(),
      h: date.getHours(),
      i: date.getMinutes(),
      s: date.getSeconds(),
      a: date.getDay()
    }
    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
      let value = formatObj[key]
      if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
      if (result.length > 0 && value < 10) {
        value = '0' + value
      }
      return value || 0
    })
    
    return time_str
  }